package A.动态数组;

import java.util.Arrays;

public class _面试题1001_合并排序的数组 {

    /**
     * 自解--直管法
     * ---没有利用已经排序这一性质
     * @param A
     * @param m
     * @param B
     * @param n
     */
    public void merge(int[] A, int m, int[] B, int n) {

        int j=0;
        int i=m;

        while (j < n ){
                A[i] = B[j];
                j++;
                i++;
        }
        Arrays.sort(A);//快排复杂度：((m+n)\log(m+n))O((m+n)log(m+n))


    }

    /**
     * 题解：均已排好顺序 所以都从后往前遍历 如果大的 就一次从后往前放
     */
    public void merge1(int[] A, int m, int[] B, int n) {

        int i= m-1,j= n-1;

         while (i>=0 && j>=0){
             if (A[i] < B[j]){
                 A[i+j+1] = B[j--];
             }else {
                 A[i+j+1] = A[i--];
             }
         }

         while (j>0){
             A[j] = B[j--];
         }


    }
}
